Cierre de sesión al cerrar el navegador en PHP
Opción 1
Configurar el archivo de inicio de php (php.ini) en forma directa.
Si tienes acceso a este archivo, habrá que buscar y cambiar el valor a:
session.use_trans_sid = 0
session.use_only_cookies = 1
Esta última, justamente será la que indicará que la sesión debe propagarse solo a través de cookies.
Opción 2
Cambiar la configuración del php.ini desde nuestro script php.
Esta opción consiste en forzar al php.ini desde nuestro script php (No todos los servidores tienen habilitada esta opción. Si el servidor no es propio, por las dudas, consulta con tu proveedor).
Para hacerlo, utilizaremos la función ini_set()
ini_set(«session.use_trans_sid»,»0″);
ini_set(«session.use_only_cookies»,»1″);
Ahora solo restará, cambiar el parámetro de duración a la cookie de la sesión. Esto lo haremos en nuestro script con la siguiente instrucción:
session_set_cookie_params(0, «/», $HTTP_SERVER_VARS[«HTTP_HOST»], 0); Con lo cual estaremos indicando una duración de 0 (cero) segundos. Esto significará que durará hasta que termine el script.
Por fin, hemos llegado al código:
Cierre de sesión al cerrar el navegador en PHP: módulo de control de datos
Verás reflejados los cambios al script anterior, indicados en negritas. Estos cambios serán también los que se apliquen al módulo de seguridad. De todas formas, aquí te cargo los dos códigos.
<?
//si es necesario cambiar la config. del php.ini desde tu script
ini_set(«session.use_only_cookies»,»1″);
ini_set(«session.use_trans_sid»,»0″);
//vemos si el usuario y contraseña es váildo
if ($_POST[«usuario»]==»miguel» && $_POST[«contrasena»]==»qwerty»){
//usuario y contraseña válidos
session_name(«loginUsuario»);
//asigno un nombre a la sesión para poder guardar diferentes datos
session_start();
// inicio la sesión
session_set_cookie_params(0, «/», $HTTP_SERVER_VARS[«HTTP_HOST»], 0);
//cambiamos la duración a la cookie de la sesión
$_SESSION[«autentificado»]= «SI»;
//defino la sesión que demuestra que el usuario está autorizado
$_SESSION[«ultimoAcceso»]= date(«Y-n-j H:i:s»);
//defino la fecha y hora de inicio de sesión en formato aaaa-mm-dd hh:mm:ss
header («Location: aplicacion.php»);
}else {
//si no existe le mando otra vez a la portada
header(«Location: index.php?errorusuario=si»);
}
?>
Cierre de sesión al cerrar el navegador en PHP: módulo de control de datos
Verás reflejados los cambios al script anterior, indicados en negritas.
<?
//si es necesario cambiar la config. del php.ini desde tu script
ini_set(«session.use_only_cookies»,»1″);
ini_set(«session.use_trans_sid»,»0″);
//iniciamos la sesión
session_name(«loginUsuario»);
session_start();
session_set_cookie_params(0, «/», $HTTP_SERVER_VARS[«HTTP_HOST»], 0);
//cambiamos la duración a la cookie de la sesión
//antes de hacer los cálculos, compruebo que el usuario está logueado
//utilizamos el mismo script que antes
if ($_SESSION[«autentificado»] != «SI») {
//si no está logueado lo envío a la página de autentificación
header(«Location: index.php»);
} else {
//sino, calculamos el tiempo transcurrido
$fechaGuardada = $_SESSION[«ultimoAcceso»];
$ahora = date(«Y-n-j H:i:s»);
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));
//comparamos el tiempo transcurrido
if($tiempo_transcurrido >= 600) {
//si pasaron 10 minutos o más
session_destroy(); // destruyo la sesión
header(«Location: index.php»); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
}else {
$_SESSION[«ultimoAcceso»] = $ahora;
}
}
?>

